package com.situ.stmall.admin.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.situ.stmall.admin.entity.APIResult;
import com.situ.stmall.admin.util.TokenUtil;
import com.situ.stmall.admin.util.TokenUtil.Token;
import com.situ.stmall.admin.util.VerCodeUtil;

@Controller
@CrossOrigin(origins = "*")
public class VercodeController {

	/**
	 * 返回一张图片
	 * Token:会话保持的技术，session cookie 不能跨域
	 *	 	实际上是一个字符串，由服务器生成，交给客户端使用
	 * 		通过加密的方式将登陆用户的信息，保存在token中，
	 * 		客户端再次请求时可以携带token请求
	 * 		服务器从token中解密登陆用户信息，
	 * 优势1：不需要将数据保存在内存中
	 * 		2：不受跨域请求的限制
	 * 可逆的加密算法
	 */
	@GetMapping("/vercode")
	@ResponseBody
	public APIResult vercode(HttpServletResponse response) {
		//随机生成字符串
		String vercode = VerCodeUtil.randomCode(4);
		
		//加密至token中   jwt 导包
		String strToken = TokenUtil.createToken(vercode);
		
		APIResult apiResult = new APIResult();
		apiResult.setStatus(200);
		apiResult.setMsg(strToken);
		return apiResult;
	}
	
	@GetMapping("/vercode/{token}")
	public void vercode(@PathVariable("token") String strToken, 
			HttpServletResponse response) {
		Token token = TokenUtil.parseToken(strToken);
		
		String vercode = token.getCode();
		
		VerCodeUtil.createVerCode(response, vercode);
	}
}
